# 数据分析题目解答(建议先赞后看，养成习惯 如果不赞，先拉出去枪毙两分钟 作者：小匠IT)
import pandas as pd
import os
from matplotlib.font_manager import FontProperties

# 设置中文字体路径（请根据实际路径调整）
font_path = r'fonts/SIMSUN.TTC'
font_prop = FontProperties(fname=font_path)

# 创建输出文件夹
output_folder = r'output/43'
os.makedirs(output_folder, exist_ok=True)

# 读取原始数据
data_file_path = r'data/43/产品SKU分析-原始数据.xlsx'
df_sku = pd.read_excel(data_file_path)

# 检查并转换 '支付金额' 列的数据类型
print(f"原始 '支付金额' 数据类型: {df_sku['支付金额'].dtype}")
# 强制转换为字符串，并去除逗号后转换为浮点数
# 使用 errors='coerce' 处理无法转换的值，它们会被设置为 NaN
df_sku['支付金额'] = pd.to_numeric(df_sku['支付金额'].astype(str).str.replace(',', ''), errors='coerce')

# 检查是否有任何无法转换的值
if df_sku['支付金额'].isnull().any():
    print("警告: 有部分 '支付金额' 数据无法转换为数字")
    # 可选：删除或填充这些行，取决于您的需求
    # df_sku = df_sku.dropna(subset=['支付金额'])
    # 或者用0填充
    df_sku['支付金额'].fillna(0, inplace=True)

# 计算爆款 SKU：以支付件数为主，支付金额为辅
top_skus = df_sku.sort_values(by=['支付件数', '支付金额'], ascending=[False, False]).head(3)

# 获取前三名爆款 SKU 名称
top_sku_names = top_skus['sku名称'].tolist()

# 分析用户偏好：从加购件数来看，用户偏爱的颜色
favorite_color = "未知"
if '颜色' in df_sku.columns:
    favorite_color_df = df_sku.groupby('颜色')['加购件数'].sum().reset_index()
    favorite_color = favorite_color_df.loc[favorite_color_df['加购件数'].idxmax(), '颜色']

# 分析用户选择最多的套餐：从支付件数来看
most_chosen_package = "未知"
if '套餐' in df_sku.columns:
    most_chosen_package_df = df_sku.groupby('套餐')['支付件数'].sum().reset_index()
    most_chosen_package = most_chosen_package_df.loc[most_chosen_package_df['支付件数'].idxmax(), '套餐']

# 打印结果
print(f"该产品排行前三的爆款SKU名称依次是：{top_sku_names[0]}、{top_sku_names[1]}、{top_sku_names[2]}.")
print(f"从加购件数来看，用户偏爱的颜色是：{favorite_color}.")
print(f"从支付件数来看，用户选择最多的套餐是：{most_chosen_package}.")

# 将结果保存到新的 Excel 文件
output_excel_file = os.path.join(output_folder, '产品SKU分析结果.xlsx')

with pd.ExcelWriter(output_excel_file, engine='xlsxwriter') as writer:
    # 将原始数据写入 Excel 文件
    df_sku.to_excel(writer, sheet_name='原始数据', index=False)
    
    # 写入分析结果
    result_df = pd.DataFrame({
        '指标': ['爆款SKU1', '爆款SKU2', '爆款SKU3', '用户偏爱的颜色', '用户选择最多的套餐'],
        '结果': [top_sku_names[0], top_sku_names[1], top_sku_names[2], favorite_color, most_chosen_package]
    })
    result_df.to_excel(writer, sheet_name='分析结果', index=False)

print(f"包含分析结果的新 Excel 文件已保存到 {output_excel_file}")

# 输出填空题答案
fill_in_the_blanks_answer = (
    f"从加购件数来看，用户偏爱的颜色是 {favorite_color}；"
    f"从支付件数来看，用户选择最多的套餐是 {most_chosen_package}。"
)
print(fill_in_the_blanks_answer)